home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / C / GBDK / lib / drawing.s < prev    next >
Encoding:
Text File  |  1996-04-15  |  9.8 KB  |  465 lines

  1.     .include    "lib/global.h"
  2.  
  3.     .area    HEADER    (ABS)
  4.  
  5.     .org    .MODE_TABLE+4*.G_MODE
  6.     JP    .gmode
  7.  
  8.     .module    Drawing
  9.  
  10.     .area    _CODE
  11.  
  12.     .AND    =    0x00
  13.     .OR    =    0x01
  14.     .XOR    =    0x02
  15.     .SOLID    =    0x03
  16.  
  17.     ; Enter graphic mode
  18. .gmode::
  19.     LD    A,#.G_MODE
  20.     LD    (.mode),A
  21.  
  22.     CALL    .wait_vbl    ; Must be in VBL before turning the screen off.
  23.  
  24.     LD    A,#0b01010001    ; LCD        = Off (no picture on screen)
  25.     LDH    (.LCDCONT),A
  26.                 ; WindowBank    =    0x9C00
  27.                 ; Window    =    Off
  28.                 ; BG Chr    =    0x8000
  29.                 ; BG Bank    =    0x9800
  30.                 ; OBJ        =    8x8
  31.                 ; OBJ        =    Off
  32.                 ; BG        =    On
  33.  
  34.     CALL    .std_pal    ; Normal palette
  35.  
  36.     LD    HL,#0x8000
  37.     XOR    A        ; A = 0
  38.     CALL     .init_tiles    ; Init the charset at 0x8000
  39.  
  40.     LD    BC,#.g_data
  41.     LD    HL,#0x8F00
  42.     LD    DE,#0x0100    ; Move 0x100 bytes
  43.     CALL    .mv_tiles    ; Add border characters
  44.  
  45.     LD    BC,#.g_tiles
  46.     CALL    .set_btt    ; Move the tiles to 0x9800
  47.  
  48.     LD    A,#0b11010001
  49.     LDH    (.LCDCONT),A
  50.  
  51.     RET
  52.  
  53.     ; Draw a 0x78 x 0x80 image at (BC)
  54.     ; Must be in graphic mode
  55. .draw_image::
  56.     LD    HL,#0x8000
  57.     LD    DE,#0x0F00
  58.     CALL     .mv_tiles    ; Move the charset to 0x8000
  59.     RET
  60.  
  61.     ; Draw a point at B,C with color D and mode E
  62. .plot::
  63.     LD    A,C
  64.     SRL    A
  65.     SRL    A
  66.     SRL    A
  67.     ADD    A,#0x80
  68.     LD    H,A        ; H = (y / 8)
  69.  
  70.      LD    A,B
  71.     SRL    A
  72.     SRL    A
  73.     SRL    A
  74.     RLC    A
  75.     RLC    A
  76.     RLC    A
  77.     RLC    A
  78.     LD    L,A        ; L = (x / 8) * 16
  79.  
  80.     LD    A,C
  81.     AND    #0x07
  82.     ADD    A,A
  83.     ADD    A,L
  84.     LD    L,A        ; L = L + ((y % 8) * 2) 
  85.  
  86.     XOR    A        ; A = 0
  87.     ADC    A,H
  88.     LD    H,A        ; If addition had a carry add to H
  89.  
  90.     ; HL = 0x8000 + int(y / 8) * 0x80 + (y % 8) * 2 + int(x / 8) * 16
  91.      LD    A,B
  92.     INC    A
  93.     AND    #0x07
  94.      LD    B,A
  95.  
  96.     LD    A,#0x01
  97. 1$:
  98.     RRC    A
  99.     DEC    B
  100.     JP    NZ,1$
  101.  
  102.     LD    B,A
  103.  
  104.     CALL    2$
  105.     RR    D
  106.     INC    HL
  107.     CALL    2$
  108.  
  109.     RET
  110.  
  111. 2$:
  112.     LD    A,E
  113.     CP    #.SOLID
  114.     JR    NZ,4$
  115.     LD    A,D
  116.     AND    #0x01
  117.     JR    Z,3$
  118.     CALL    .read_pixel
  119.     OR    B
  120.     JP    .write_pixel
  121. 3$:
  122.     CALL    .read_pixel
  123.     LD    C,A
  124.     LD    A,B
  125.     CPL
  126.     AND    C
  127.     JP    .write_pixel
  128. 4$:
  129.     CP    #.XOR
  130.     JR    NZ,5$
  131.     LD    A,D
  132.     AND    #0x01
  133.     RET    Z
  134.     CALL    .read_pixel
  135.     XOR    B
  136.     JP    .write_pixel
  137. 5$:
  138.     CP    #.OR
  139.     JR    NZ,6$
  140.     LD    A,D
  141.     AND    #0x01
  142.     RET    Z
  143.     CALL    .read_pixel
  144.     OR    B
  145.     JP    .write_pixel
  146. 6$:
  147.     CP    #.AND
  148.     RET    NZ
  149.     LD    A,D
  150.     AND    #0x01
  151.     RET    NZ
  152.     CALL    .read_pixel
  153.     LD    C,A
  154.     LD    A,B
  155.     CPL
  156.     AND    C
  157.     JP    .write_pixel
  158.  
  159. .read_pixel:
  160. 1$:
  161.     LDH    A,(.LCDSTAT)
  162.     AND    #0x02
  163.     JP    NZ,1$
  164.     LD    A,(HL)
  165.     RET
  166.  
  167. .write_pixel:
  168.     LD    C,A
  169. 1$:
  170.     LDH    A,(.LCDSTAT)
  171.     AND    #0x02
  172.     JP    NZ,1$
  173.     LD    (HL),C
  174.     RET
  175.  
  176. _plot::
  177.     PUSH    BC
  178.     PUSH    DE
  179.  
  180.     LD    A,(.mode)
  181.     CP    #.G_MODE
  182.     JR    Z,1$
  183.     CALL    .gmode
  184. 1$:
  185.     LDA    HL,6(SP)
  186.     LD    B,(HL)        ; x
  187.     INC    HL
  188.     INC    HL
  189.     LD    C,(HL)        ; y
  190.     INC    HL
  191.     INC    HL
  192.     LD    D,(HL)        ; color
  193.     INC    HL
  194.     INC    HL
  195.     LD    E,(HL)        ; mode
  196.  
  197.     CALL    .plot
  198.  
  199.     POP    DE
  200.     POP    BC
  201.     RET
  202.  
  203.  
  204. _draw_image::
  205.     PUSH    BC
  206.     PUSH    DE
  207.  
  208.     LD    A,(.mode)
  209.     CP    #.G_MODE
  210.     JR    Z,1$
  211.     CALL    .gmode
  212. 1$:
  213.     LDA    HL,6(SP)
  214.     LD    C,(HL)        ; data
  215.     INC    HL
  216.     LD    B,(HL)
  217.  
  218.     LD    HL,#0x8000
  219.     LD    DE,#0x0F00
  220.     CALL     .mv_tiles    ; Move the charset to 0x8000
  221.  
  222.     POP    DE
  223.     POP    BC
  224.     RET
  225.  
  226.     .area    _DATA
  227.  
  228. .g_data:
  229.  
  230. ; 0xF0
  231.     .byte    0b11111111,0b11111111    ; Top
  232.     .byte    0b11111111,0b11111111
  233.     .byte    0b00000000,0b11111111
  234.     .byte    0b00000000,0b00000000
  235.     .byte    0b11111111,0b00000000
  236.     .byte    0b00000000,0b11111111
  237.     .byte    0b00000000,0b00000000
  238.     .byte    0b11111111,0b00000000
  239. ; 0xF1
  240.     .byte    0b11111111,0b00000000    ; Bottom
  241.     .byte    0b00000000,0b00000000
  242.     .byte    0b00000000,0b11111111
  243.     .byte    0b11111111,0b00000000
  244.     .byte    0b00000000,0b00000000
  245.     .byte    0b00000000,0b11111111
  246.     .byte    0b11111111,0b11111111
  247.     .byte    0b11111111,0b11111111
  248. ; 0xF2
  249.     .byte    0b11001001,0b11100100    ; Left
  250.     .byte    0b11001001,0b11100100
  251.     .byte    0b11001001,0b11100100
  252.     .byte    0b11001001,0b11100100
  253.     .byte    0b11001001,0b11100100
  254.     .byte    0b11001001,0b11100100
  255.     .byte    0b11001001,0b11100100
  256.     .byte    0b11001001,0b11100100
  257. ; 0xF3
  258.     .byte    0b10010011,0b00100111    ; Right
  259.     .byte    0b10010011,0b00100111
  260.     .byte    0b10010011,0b00100111
  261.     .byte    0b10010011,0b00100111
  262.     .byte    0b10010011,0b00100111
  263.     .byte    0b10010011,0b00100111
  264.     .byte    0b10010011,0b00100111
  265.     .byte    0b10010011,0b00100111
  266. ; 0xF4
  267.     .byte    0b11111111,0b11111111    ; Top-left
  268.     .byte    0b11111111,0b11111111
  269.     .byte    0b11000000,0b11111111
  270.     .byte    0b11000000,0b11100000
  271.     .byte    0b11001111,0b11100000
  272.     .byte    0b11001000,0b11100111
  273.     .byte    0b11001000,0b11100100
  274.     .byte    0b11001001,0b11100100
  275. ; 0xF5
  276.     .byte    0b11111111,0b11111111    ; Top-right
  277.     .byte    0b11111111,0b11111111
  278.     .byte    0b00000011,0b11111111
  279.     .byte    0b00000011,0b00000111
  280.     .byte    0b11110011,0b00000111
  281.     .byte    0b00010011,0b11100111
  282.     .byte    0b00010011,0b00100111
  283.     .byte    0b10010011,0b00100111
  284. ; 0xF6
  285.     .byte    0b11001001,0b11100100    ; Bottom-left
  286.     .byte    0b11001000,0b11100100
  287.     .byte    0b11001000,0b11100111
  288.     .byte    0b11001111,0b11100000
  289.     .byte    0b11000000,0b11100000
  290.     .byte    0b11000000,0b11111111
  291.     .byte    0b11111111,0b11111111
  292.     .byte    0b11111111,0b11111111
  293. ; 0xF7
  294.     .byte    0b10010011,0b00100111    ; Bottom-right
  295.     .byte    0b00010011,0b00100111
  296.     .byte    0b00010011,0b11100111
  297.     .byte    0b11110011,0b00000111
  298.     .byte    0b00000011,0b00000111
  299.     .byte    0b00000011,0b11111111
  300.     .byte    0b11111111,0b11111111
  301.     .byte    0b11111111,0b11111111
  302. ; 0xF8
  303.     .byte    0b00000000,0b00000000    ; Space
  304.     .byte    0b00000000,0b00000000
  305.     .byte    0b00000000,0b00000000
  306.     .byte    0b00000000,0b00000000
  307.     .byte    0b00000000,0b00000000
  308.     .byte    0b00000000,0b00000000
  309.     .byte    0b00000000,0b00000000
  310.     .byte    0b00000000,0b00000000
  311. ; 0xF9
  312.     .byte    0b00000000,0b00000000    ; Space
  313.     .byte    0b00000000,0b00000000
  314.     .byte    0b00000000,0b00000000
  315.     .byte    0b00000000,0b00000000
  316.     .byte    0b00000000,0b00000000
  317.     .byte    0b00000000,0b00000000
  318.     .byte    0b00000000,0b00000000
  319.     .byte    0b00000000,0b00000000
  320. ; 0xFA
  321.     .byte    0b00000000,0b00000000    ; Space
  322.     .byte    0b00000000,0b00000000
  323.     .byte    0b00000000,0b00000000
  324.     .byte    0b00000000,0b00000000
  325.     .byte    0b00000000,0b00000000
  326.     .byte    0b00000000,0b00000000
  327.     .byte    0b00000000,0b00000000
  328.     .byte    0b00000000,0b00000000
  329. ; 0xFB
  330.     .byte    0b00000000,0b00000000    ; Space
  331.     .byte    0b00000000,0b00000000
  332.     .byte    0b00000000,0b00000000
  333.     .byte    0b00000000,0b00000000
  334.     .byte    0b00000000,0b00000000
  335.     .byte    0b00000000,0b00000000
  336.     .byte    0b00000000,0b00000000
  337.     .byte    0b00000000,0b00000000
  338. ; 0xFC
  339.     .byte    0b00000000,0b00000000    ; Space
  340.     .byte    0b00000000,0b00000000
  341.     .byte    0b00000000,0b00000000
  342.     .byte    0b00000000,0b00000000
  343.     .byte    0b00000000,0b00000000
  344.     .byte    0b00000000,0b00000000
  345.     .byte    0b00000000,0b00000000
  346.     .byte    0b00000000,0b00000000
  347. ; 0xFD
  348.     .byte    0b00000000,0b00000000    ; Space
  349.     .byte    0b00000000,0b00000000
  350.     .byte    0b00000000,0b00000000
  351.     .byte    0b00000000,0b00000000
  352.     .byte    0b00000000,0b00000000
  353.     .byte    0b00000000,0b00000000
  354.     .byte    0b00000000,0b00000000
  355.     .byte    0b00000000,0b00000000
  356. ; 0xFE
  357.     .byte    0b00000000,0b00000000    ; Space
  358.     .byte    0b00000000,0b00000000
  359.     .byte    0b00000000,0b00000000
  360.     .byte    0b00000000,0b00000000
  361.     .byte    0b00000000,0b00000000
  362.     .byte    0b00000000,0b00000000
  363.     .byte    0b00000000,0b00000000
  364.     .byte    0b00000000,0b00000000
  365. ; 0xFF
  366.     .byte    0b00000000,0b00000000    ; Space
  367.     .byte    0b00000000,0b00000000
  368.     .byte    0b00000000,0b00000000
  369.     .byte    0b00000000,0b00000000
  370.     .byte    0b00000000,0b00000000
  371.     .byte    0b00000000,0b00000000
  372.     .byte    0b00000000,0b00000000
  373.     .byte    0b00000000,0b00000000
  374.  
  375. .g_tiles:
  376.     .byte    0xFF,0xF4,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
  377.     .byte    0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
  378.     .byte    0xF0,0xF0,0xF5,0xFF,0x00,0x00,0x00,0x00
  379.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  380.  
  381.     .byte    0xFF,0xF2,0x00,0x01,0x02,0x03,0x04,0x05
  382.     .byte    0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D
  383.     .byte    0x0E,0x0F,0xF3,0xFF,0x00,0x00,0x00,0x00
  384.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  385.  
  386.     .byte    0xFF,0xF2,0x10,0x11,0x12,0x13,0x14,0x15
  387.     .byte    0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D
  388.     .byte    0x1E,0x1F,0xF3,0xFF,0x00,0x00,0x00,0x00
  389.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  390.  
  391.     .byte    0xFF,0xF2,0x20,0x21,0x22,0x23,0x24,0x25
  392.     .byte    0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D
  393.     .byte    0x2E,0x2F,0xF3,0xFF,0x00,0x00,0x00,0x00
  394.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  395.  
  396.     .byte    0xFF,0xF2,0x30,0x31,0x32,0x33,0x34,0x35
  397.     .byte    0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D
  398.     .byte    0x3E,0x3F,0xF3,0xFF,0x00,0x00,0x00,0x00
  399.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  400.  
  401.     .byte    0xFF,0xF2,0x40,0x41,0x42,0x43,0x44,0x45
  402.     .byte    0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D
  403.     .byte    0x4E,0x4F,0xF3,0xFF,0x00,0x00,0x00,0x00
  404.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  405.  
  406.     .byte    0xFF,0xF2,0x50,0x51,0x52,0x53,0x54,0x55
  407.     .byte    0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D
  408.     .byte    0x5E,0x5F,0xF3,0xFF,0x00,0x00,0x00,0x00
  409.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  410.  
  411.     .byte    0xFF,0xF2,0x60,0x61,0x62,0x63,0x64,0x65
  412.     .byte    0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D
  413.     .byte    0x6E,0x6F,0xF3,0xFF,0x00,0x00,0x00,0x00
  414.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  415.  
  416.     .byte    0xFF,0xF2,0x70,0x71,0x72,0x73,0x74,0x75
  417.     .byte    0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D
  418.     .byte    0x7E,0x7F,0xF3,0xFF,0x00,0x00,0x00,0x00
  419.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  420.  
  421.     .byte    0xFF,0xF2,0x80,0x81,0x82,0x83,0x84,0x85
  422.     .byte    0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D
  423.     .byte    0x8E,0x8F,0xF3,0xFF,0x00,0x00,0x00,0x00
  424.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  425.  
  426.     .byte    0xFF,0xF2,0x90,0x91,0x92,0x93,0x94,0x95
  427.     .byte    0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D
  428.     .byte    0x9E,0x9F,0xF3,0xFF,0x00,0x00,0x00,0x00
  429.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  430.  
  431.     .byte    0xFF,0xF2,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5
  432.     .byte    0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD
  433.     .byte    0xAE,0xAF,0xF3,0xFF,0x00,0x00,0x00,0x00
  434.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  435.  
  436.     .byte    0xFF,0xF2,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5
  437.     .byte    0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD
  438.     .byte    0xBE,0xBF,0xF3,0xFF,0x00,0x00,0x00,0x00
  439.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  440.  
  441.     .byte    0xFF,0xF2,0xC0,0xC1,0xC2,0xC3,0xC4,0xC5
  442.     .byte    0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD
  443.     .byte    0xCE,0xCF,0xF3,0xFF,0x00,0x00,0x00,0x00
  444.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  445.  
  446.     .byte    0xFF,0xF2,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5
  447.     .byte    0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD
  448.     .byte    0xDE,0xDF,0xF3,0xFF,0x00,0x00,0x00,0x00
  449.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  450.  
  451.     .byte    0xFF,0xF2,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5
  452.     .byte    0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED
  453.     .byte    0xEE,0xEF,0xF3,0xFF,0x00,0x00,0x00,0x00
  454.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  455.  
  456.     .byte    0xFF,0xF6,0xF1,0xF1,0xF1,0xF1,0xF1,0xF1
  457.     .byte    0xF1,0xF1,0xF1,0xF1,0xF1,0xF1,0xF1,0xF1
  458.     .byte    0xF1,0xF1,0xF7,0xFF,0x00,0x00,0x00,0x00
  459.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  460.  
  461.     .byte    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
  462.     .byte    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
  463.     .byte    0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00
  464.     .byte    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  465.